Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / androidApp / src / google / kotlin / org / meshtastic / app / ai / GeminiNanoDocAssistant.kt

Displaying Raw • Download

androidApp/src/google/kotlin/org/meshtastic/app/ai/GeminiNanoDocAssistant.kt f5e5fb6da63ee85e64dbbe19a519a5a3deccd408 (f5e5fb6d) Text, 21.16 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.app.ai

Tff7b72import T7ee787co.touchlab.kermit.Logger
Tff7b72import T7ee787com.google.firebase.Firebase
Tff7b72import T7ee787com.google.firebase.ai.Chat
Tff7b72import T7ee787com.google.firebase.ai.DownloadStatus
Tff7b72import T7ee787com.google.firebase.ai.InferenceMode
Tff7b72import T7ee787com.google.firebase.ai.OnDeviceConfig
Tff7b72import T7ee787com.google.firebase.ai.OnDeviceModelStatus
Tff7b72import T7ee787com.google.firebase.ai.ai
Tff7b72import T7ee787com.google.firebase.ai.type.GenerativeBackend
Tff7b72import T7ee787com.google.firebase.ai.type.PublicPreviewAPI
Tff7b72import T7ee787com.google.firebase.ai.type.Tool
Tff7b72import T7ee787com.google.firebase.ai.type.content
Tff7b72import T7ee787org.meshtastic.feature.docs.ai.AIDocAssistant
Tff7b72import T7ee787org.meshtastic.feature.docs.data.DocBundleLoader
Tff7b72import T7ee787org.meshtastic.feature.docs.data.KeywordSearchEngine
Tff7b72import T7ee787org.meshtastic.feature.docs.model.AIDocAssistantResult
Tff7b72import T7ee787org.meshtastic.feature.docs.model.DocPage
Tff7b72import T7ee787org.meshtastic.feature.docs.model.DocsAiError

T8b949e/**
* Gemini on-device AI assistant for the Google flavor.
*
* Uses Firebase AI Logic hybrid SDK with [InferenceMode.ONLY_ON_DEVICE] for fast first-message answers, and a cloud
* model with URL context grounding for follow-up conversation. Supported on Pixel 9+, Samsung Galaxy S25/S26, OnePlus
* 13/15, and other devices with AICore.
*
* Context strategy: extracts only the **most relevant paragraphs** from each page (those containing query terms),
* strips markdown formatting to maximize information density, and fits within the on-device token budget (~4K tokens).
* This ensures fast, offline-capable answers even without cloud fallback.
*
* @see <a href="https://firebase.google.com/docs/ai-logic/hybrid/android/get-started">Firebase AI Logic Hybrid</a>
*/
Tf0883e@OptInTb4b4b4(Te6edf3PublicPreviewAPITff7b72::Te6edf3classTb4b4b4)
Tff7b72class T56d364GeminiNanoDocAssistantTb4b4b4(Tff7b72private Tff7b72val Te6edf3searchEngineTb4b4b4: Te6edf3KeywordSearchEngineTb4b4b4, Tff7b72private Tff7b72val Te6edf3bundleLoaderTb4b4b4: Te6edf3DocBundleLoaderTb4b4b4) Tb4b4b4:
Te6edf3AIDocAssistant Tb4b4b4{

T8b949e/** On-device model for fast first-message answers grounded in bundled docs. */
Tff7b72private Tff7b72val Te6edf3onDeviceModel Tff7b72by Te6edf3lazy Tb4b4b4{
Te6edf3FirebaseTb4b4b4.Te6edf3aiTb4b4b4(Te6edf3backend Tff7b72= Te6edf3GenerativeBackendTb4b4b4.Te6edf3googleAITb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3generativeModelTb4b4b4(
Te6edf3modelName Tff7b72= Te6edf3MODEL_NAMETb4b4b4,
Te6edf3systemInstruction Tff7b72= Te6edf3content Tb4b4b4{ Te6edf3textTb4b4b4(Te6edf3SYSTEM_INSTRUCTIONTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onDeviceConfig Tff7b72= Te6edf3OnDeviceConfigTb4b4b4(Te6edf3mode Tff7b72= Te6edf3InferenceModeTb4b4b4.Te6edf3ONLY_ON_DEVICETb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e/** Cloud model with URL context — fetches only from meshtastic.org and github.com/meshtastic. */
Tff7b72private Tff7b72val Te6edf3groundedModel Tff7b72by Te6edf3lazy Tb4b4b4{
Te6edf3FirebaseTb4b4b4.Te6edf3aiTb4b4b4(Te6edf3backend Tff7b72= Te6edf3GenerativeBackendTb4b4b4.Te6edf3googleAITb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3generativeModelTb4b4b4(
Te6edf3modelName Tff7b72= Te6edf3MODEL_NAMETb4b4b4,
Te6edf3systemInstruction Tff7b72= Te6edf3content Tb4b4b4{ Te6edf3textTb4b4b4(Te6edf3SYSTEM_INSTRUCTIONTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3tools Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3ToolTb4b4b4.Te6edf3urlContextTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e/** Active multi-turn chat session. Maintains conversation history across messages. */
Tff7b72private Tff7b72var Te6edf3chatSessionTb4b4b4: Te6edf3Chat? Tff7b72= Tff7b72null
Tff7b72private Tff7b72var Te6edf3messageCount Tff7b72= T79c0ff0

Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffisSupportedTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Tff7b72try Tb4b4b4{
T8b949e// Always supported on Google flavor — cloud model with Google Search grounding is always available.
T8b949e// On-device model provides faster/offline answers when available; check status to trigger download.
Tff7b72val Te6edf3ext Tff7b72= Te6edf3onDeviceModelTb4b4b4.Te6edf3onDeviceExtension
Tff7b72val Te6edf3status Tff7b72= Te6edf3extTff7b72?.Te6edf3checkStatusTb4b4b4(Tb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffOn-device model status: Tffd700$Te6edf3statusTa5d6ff" Tb4b4b4}
Tff7b72when Tb4b4b4(Te6edf3statusTb4b4b4) Tb4b4b4{
Te6edf3OnDeviceModelStatusTb4b4b4.Te6edf3AVAILABLE Tff7b72-Tff7b72> Tff7b72true

Te6edf3OnDeviceModelStatusTb4b4b4.Te6edf3DOWNLOADING Tff7b72-Tff7b72> Tff7b72true

Te6edf3OnDeviceModelStatusTb4b4b4.Te6edf3DOWNLOADABLE Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3iTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffModel downloadable — requesting downloadTa5d6ff" Tb4b4b4}
Te6edf3extTb4b4b4.Te6edf3downloadTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3collect Tb4b4b4{ Te6edf3downloadStatus Tff7b72-Tff7b72>
Tff7b72when Tb4b4b4(Te6edf3downloadStatusTb4b4b4) Tb4b4b4{
Tff7b72is Te6edf3DownloadStatusTb4b4b4.Te6edf3DownloadStarted Tff7b72-Tff7b72>
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffDownload started: Tffd700${Te6edf3downloadStatusTb4b4b4.Te6edf3bytesToDownloadTffd700}Ta5d6ff bytesTa5d6ff" Tb4b4b4}

Tff7b72is Te6edf3DownloadStatusTb4b4b4.Te6edf3DownloadInProgress Tff7b72-Tff7b72>
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffDownload progress: Tffd700${Te6edf3downloadStatusTb4b4b4.Te6edf3totalBytesDownloadedTffd700}Ta5d6ff bytesTa5d6ff"
Tb4b4b4}

Tff7b72is Te6edf3DownloadStatusTb4b4b4.Te6edf3DownloadCompleted Tff7b72-Tff7b72> Te6edf3LoggerTb4b4b4.Te6edf3iTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffModel download completedTa5d6ff" Tb4b4b4}

Tff7b72is Te6edf3DownloadStatusTb4b4b4.Te6edf3DownloadFailed Tff7b72-Tff7b72>
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffModel download failed: Tffd700$Te6edf3downloadStatusTa5d6ff" Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72true
Tb4b4b4}

Tff7b72else Tff7b72-Tff7b72> Tff7b72true T8b949e// Cloud grounded model is always available even without on-device support.
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffisSupported() check failed, using cloud only: Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Tff7b72true T8b949e// Cloud grounded model is always available.
Tb4b4b4}

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooGenericExceptionCaughtTa5d6ff"Tb4b4b4)
Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffanswerTb4b4b4(Te6edf3questionTb4b4b4: Tffa657StringTb4b4b4, Te6edf3currentPageIdTb4b4b4: Tffa657String?Tb4b4b4)Tb4b4b4: Te6edf3AIDocAssistantResult Tff7b72= Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3bundle Tff7b72= Te6edf3bundleLoaderTb4b4b4.Te6edf3loadTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3queryTerms Tff7b72= Te6edf3extractQueryTermsTb4b4b4(Te6edf3questionTb4b4b4)

T8b949e// Load all page content for full-text search ranking.
Tff7b72val Te6edf3allContent Tff7b72= Te6edf3bundleTb4b4b4.Te6edf3pagesTb4b4b4.Te6edf3associateWith Tb4b4b4{ Te6edf3page Tff7b72-Tff7b72> Te6edf3bundleLoaderTb4b4b4.Te6edf3readPageTb4b4b4(Te6edf3pageTb4b4b4.Te6edf3idTb4b4b4)Tff7b72?.Te6edf3markdownTb4b4b4.Te6edf3orEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}

T8b949e// Rank pages by relevance: full-text content search + keyword/title matching.
Tff7b72val Te6edf3rankedPages Tff7b72= Te6edf3rankPagesByRelevanceTb4b4b4(Te6edf3queryTermsTb4b4b4, Te6edf3bundleTb4b4b4.Te6edf3pagesTb4b4b4, Te6edf3allContentTb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffRanked pages: Tffd700${Te6edf3rankedPagesTb4b4b4.Te6edf3takeTb4b4b4(T79c0ff5Tb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Ta5d6ff"Tffd700${Tffa657itTb4b4b4.Te6edf3firstTb4b4b4.Te6edf3idTffd700}Ta5d6ff(Tffd700${Tffa657itTb4b4b4.Te6edf3secondTffd700}Ta5d6ff)Ta5d6ff" Tb4b4b4}Tffd700}Ta5d6ff" Tb4b4b4}

T8b949e// Build compact context by extracting only relevant paragraphs.
Tff7b72val Te6edf3contextResult Tff7b72= Te6edf3buildContextTb4b4b4(Te6edf3currentPageIdTb4b4b4, Te6edf3queryTermsTb4b4b4, Te6edf3rankedPagesTb4b4b4, Te6edf3allContentTb4b4b4, Te6edf3MAX_CONTEXT_CHARSTb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffContext: Tffd700${Te6edf3contextResultTb4b4b4.Te6edf3partsTb4b4b4.Te6edf3sizeTffd700}Ta5d6ff pages, Tffd700${Te6edf3contextResultTb4b4b4.Te6edf3totalCharsTffd700}Ta5d6ff chars (budget Tffd700$Te6edf3MAX_CONTEXT_CHARSTa5d6ff)Ta5d6ff"
Tb4b4b4}

Tff7b72val Te6edf3prompt Tff7b72= Te6edf3buildPromptTb4b4b4(Te6edf3questionTb4b4b4, Te6edf3contextResultTb4b4b4.Te6edf3partsTb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffPrompt: Tffd700${Te6edf3promptTb4b4b4.Te6edf3lengthTffd700}Ta5d6ff chars, message #Tffd700$Te6edf3messageCountTa5d6ff" Tb4b4b4}

Tff7b72val Te6edf3chatResult Tff7b72= Te6edf3generateWithChatTb4b4b4(Te6edf3promptTb4b4b4)
Te6edf3messageCountTff7b72+Tff7b72+
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffResponse (Tffd700${Te6edf3chatResultTb4b4b4.Te6edf3answerTb4b4b4.Te6edf3lengthTffd700}Ta5d6ff chars): Tffd700${Te6edf3chatResultTb4b4b4.Te6edf3answerTb4b4b4.Te6edf3takeTb4b4b4(T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tffd700}Ta5d6ff" Tb4b4b4}

T8b949e// Merge context pages with any pages mentioned by title in the response (à la Meshtastic-Apple).
Tff7b72val Te6edf3mentionedPages Tff7b72=
Te6edf3bundleTb4b4b4.Te6edf3pagesTb4b4b4.Te6edf3filter Tb4b4b4{ Te6edf3page Tff7b72-Tff7b72>
Te6edf3pageTb4b4b4.Te6edf3id Tff7b72!in Te6edf3contextResultTb4b4b4.Te6edf3usedPageIds Tff7b72&Tff7b72& Te6edf3chatResultTb4b4b4.Te6edf3answerTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3pageTb4b4b4.Te6edf3titleTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3allSourcePages Tff7b72=
Te6edf3contextResultTb4b4b4.Te6edf3usedPageIdsTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Te6edf3id Tff7b72-Tff7b72> Te6edf3bundleTb4b4b4.Te6edf3pagesTb4b4b4.Te6edf3find Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3id Tff7b72=Tff7b72= Te6edf3id Tb4b4b4} Tb4b4b4} Tff7b72+ Te6edf3mentionedPages

Te6edf3AIDocAssistantResultTb4b4b4.Te6edf3SuccessTb4b4b4(
Te6edf3answer Tff7b72= Te6edf3chatResultTb4b4b4.Te6edf3answerTb4b4b4,
Te6edf3sourcePages Tff7b72= Te6edf3allSourcePagesTb4b4b4,
Te6edf3usedOnDeviceModel Tff7b72= Te6edf3chatResultTb4b4b4.Te6edf3usedOnDeviceTb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffInference failed: Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Tff7b72val Te6edf3errorType Tff7b72=
Tff7b72when Tb4b4b4{
Te6edf3eTb4b4b4.Te6edf3messageTff7b72?.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffBUSYTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tff7b72-Tff7b72> Te6edf3DocsAiErrorTb4b4b4.Te6edf3Busy
Te6edf3eTb4b4b4.Te6edf3messageTff7b72?.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffBATTERYTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tff7b72-Tff7b72> Te6edf3DocsAiErrorTb4b4b4.Te6edf3Busy
Te6edf3eTb4b4b4.Te6edf3messageTff7b72?.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffBACKGROUNDTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tff7b72-Tff7b72> Te6edf3DocsAiErrorTb4b4b4.Te6edf3Busy
Te6edf3eTb4b4b4.Te6edf3messageTff7b72?.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffUNAVAILABLETa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tff7b72-Tff7b72> Te6edf3DocsAiErrorTb4b4b4.Te6edf3ModelUnavailable
Tff7b72else Tff7b72-Tff7b72> Te6edf3DocsAiErrorTb4b4b4.Te6edf3Unknown
Tb4b4b4}
Tff7b72val Te6edf3fallbackPages Tff7b72= Te6edf3searchEngineTb4b4b4.Te6edf3selectForTokenBudgetTb4b4b4(Te6edf3questionTb4b4b4, Te6edf3maxChars Tff7b72= Te6edf3MAX_CONTEXT_CHARSTb4b4b4)
Te6edf3AIDocAssistantResultTb4b4b4.Te6edf3ErrorTb4b4b4(Te6edf3reason Tff7b72= Te6edf3errorTypeTb4b4b4, Te6edf3suggestedPages Tff7b72= Te6edf3fallbackPagesTb4b4b4)
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffresetSessionTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3chatSession Tff7b72= Tff7b72null
Te6edf3messageCount Tff7b72= T79c0ff0
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffChat session resetTa5d6ff" Tb4b4b4}
Tb4b4b4}

T8b949e/** Result from [generateWithChat] indicating which model produced the answer. */
Tff7b72private Tff7b72data Tff7b72class T56d364ChatResultTb4b4b4(Tff7b72val Te6edf3answerTb4b4b4: Tffa657StringTb4b4b4, Tff7b72val Te6edf3usedOnDeviceTb4b4b4: Tffa657BooleanTb4b4b4)

T8b949e/**
* Uses the Chat API for multi-turn conversation. First message tries on-device for speed; all messages also go
* through the cloud chat session to maintain conversation history for follow-ups.
*/
Tff7b72private Tff7b72suspend Tff7b72fun Td2a8ffgenerateWithChatTb4b4b4(Te6edf3promptTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3ChatResult Tb4b4b4{
Tff7b72val Te6edf3chat Tff7b72= Te6edf3chatSession Tff7b72?: Te6edf3groundedModelTb4b4b4.Te6edf3startChatTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3also Tb4b4b4{ Te6edf3chatSession Tff7b72= Tffa657it Tb4b4b4}

T8b949e// First message: try on-device in parallel for speed, use cloud chat as primary.
Tff7b72if Tb4b4b4(Te6edf3messageCount Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3onDeviceAnswer Tff7b72=
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3response Tff7b72= Te6edf3onDeviceModelTb4b4b4.Te6edf3generateContentTb4b4b4(Te6edf3promptTb4b4b4)
Te6edf3responseTb4b4b4.Te6edf3textTff7b72?.Te6edf3trimEndTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffOn-device inference failed: Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Tff7b72null
Tb4b4b4}

T8b949e// If on-device gave a good answer, send it to chat as history context and return it.
Tff7b72if Tb4b4b4(Te6edf3onDeviceAnswer Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Tff7b72!Te6edf3looksLikeNoAnswerTb4b4b4(Te6edf3onDeviceAnswerTb4b4b4)Tb4b4b4) Tb4b4b4{
T8b949e// Still send to cloud chat so it has context for follow-ups (fire and forget).
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3groundedPrompt Tff7b72= Te6edf3prompt Tff7b72+ Te6edf3MESHTASTIC_URL_HINT
Te6edf3chatTb4b4b4.Te6edf3sendMessageTb4b4b4(Te6edf3groundedPromptTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffCloud chat seeding failed (non-fatal): Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3ChatResultTb4b4b4(Te6edf3answer Tff7b72= Te6edf3onDeviceAnswerTb4b4b4, Te6edf3usedOnDevice Tff7b72= Tff7b72trueTb4b4b4)
Tb4b4b4}
Tb4b4b4}

T8b949e// Use cloud chat (maintains full conversation history for follow-ups).
Tff7b72val Te6edf3groundedPrompt Tff7b72= Te6edf3prompt Tff7b72+ Te6edf3MESHTASTIC_URL_HINT
Tff7b72val Te6edf3response Tff7b72= Te6edf3chatTb4b4b4.Te6edf3sendMessageTb4b4b4(Te6edf3groundedPromptTb4b4b4)
Tff7b72return Te6edf3ChatResultTb4b4b4(
Te6edf3answer Tff7b72= Te6edf3responseTb4b4b4.Te6edf3textTff7b72?.Te6edf3trimEndTb4b4b4(Tb4b4b4) Tff7b72?: Ta5d6ff"Ta5d6ffI wasn't able to generate a response.Ta5d6ff"Tb4b4b4,
Te6edf3usedOnDevice Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e/** Heuristic: detect when the model says it can't find the answer in the provided docs. */
Tff7b72private Tff7b72fun Td2a8fflooksLikeNoAnswerTb4b4b4(Te6edf3answerTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657Boolean Tb4b4b4{
Tff7b72val Te6edf3lower Tff7b72= Te6edf3answerTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3lowerTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffnot in the docsTa5d6ff"Tb4b4b4) Tff7b72|Tff7b72|
Te6edf3lowerTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffnot found inTa5d6ff"Tb4b4b4) Tff7b72|Tff7b72|
Te6edf3lowerTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffi don't have informationTa5d6ff"Tb4b4b4) Tff7b72|Tff7b72|
Te6edf3lowerTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffi couldn't findTa5d6ff"Tb4b4b4) Tff7b72|Tff7b72|
Te6edf3lowerTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffnot covered in the documentationTa5d6ff"Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72data Tff7b72class T56d364ContextResultTb4b4b4(Tff7b72val Te6edf3partsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4, Tff7b72val Te6edf3usedPageIdsTb4b4b4: Te6edf3SetTff7b72<Tffa657StringTff7b72>Tb4b4b4, Tff7b72val Te6edf3totalCharsTb4b4b4: Tffa657IntTb4b4b4)

T8b949e/** Builds context parts from ranked pages within the given char budget. */
Tff7b72private Tff7b72fun Td2a8ffbuildContextTb4b4b4(
Te6edf3currentPageIdTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3queryTermsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4,
Te6edf3rankedPagesTb4b4b4: Te6edf3ListTff7b72<Te6edf3PairTff7b72<Te6edf3DocPageTb4b4b4, Tffa657IntTff7b72>Tff7b72>Tb4b4b4,
Te6edf3allContentTb4b4b4: Te6edf3MapTff7b72<Te6edf3DocPageTb4b4b4, Tffa657StringTff7b72>Tb4b4b4,
Te6edf3budgetTb4b4b4: Tffa657IntTb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3ContextResult Tb4b4b4{
Tff7b72val Te6edf3usedPageIds Tff7b72= Te6edf3mutableSetOfTff7b72<Tffa657StringTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3contextParts Tff7b72= Te6edf3mutableListOfTff7b72<Tffa657StringTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72var Te6edf3totalChars Tff7b72= T79c0ff0

T8b949e// Current page gets priority.
Tff7b72if Tb4b4b4(Te6edf3currentPageId Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3content Tff7b72= Te6edf3allContentTb4b4b4.Te6edf3entriesTb4b4b4.Te6edf3find Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3keyTb4b4b4.Te6edf3id Tff7b72=Tff7b72= Te6edf3currentPageId Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3content Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3contentTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3pageBudget Tff7b72= Te6edf3MAX_PAGE_CHARSTb4b4b4.Te6edf3coerceAtMostTb4b4b4(Te6edf3budgetTb4b4b4)
Tff7b72val Te6edf3extracted Tff7b72= Te6edf3extractRelevantContentTb4b4b4(Te6edf3contentTb4b4b4.Te6edf3keyTb4b4b4.Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4.Te6edf3valueTb4b4b4, Te6edf3queryTermsTb4b4b4, Te6edf3pageBudgetTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3extractedTb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3contextPartsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3extractedTb4b4b4)
Te6edf3totalChars Tff7b72+Tff7b72= Te6edf3extractedTb4b4b4.Te6edf3length
Te6edf3usedPageIdsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3currentPageIdTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e// Add relevant paragraphs from top-ranked pages within budget.
Tff7b72for Tb4b4b4(Tb4b4b4(Te6edf3pageTb4b4b4, Te6edf3_Tb4b4b4) Tff7b72in Te6edf3rankedPagesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pageTb4b4b4.Te6edf3id Tff7b72in Te6edf3usedPageIdsTb4b4b4) Tff7b72continue
Tff7b72if Tb4b4b4(Te6edf3totalChars Tff7b72>Tff7b72= Te6edf3budgetTb4b4b4) Tff7b72break
Tff7b72val Te6edf3pageContent Tff7b72= Te6edf3allContentTff7b72[Te6edf3pageTff7b72] Tff7b72?: Tff7b72continue
Tff7b72if Tb4b4b4(Te6edf3pageContentTb4b4b4.Te6edf3isBlankTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72continue

Tff7b72val Te6edf3snippetBudget Tff7b72= Tb4b4b4(Te6edf3budget Tff7b72- Te6edf3totalCharsTb4b4b4)Tb4b4b4.Te6edf3coerceAtMostTb4b4b4(Te6edf3MAX_SNIPPET_CHARSTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3snippetBudget Tff7b72< Te6edf3MIN_USEFUL_SNIPPETTb4b4b4) Tff7b72break

Tff7b72val Te6edf3extracted Tff7b72= Te6edf3extractRelevantContentTb4b4b4(Te6edf3pageTb4b4b4.Te6edf3titleTb4b4b4, Te6edf3pageContentTb4b4b4, Te6edf3queryTermsTb4b4b4, Te6edf3snippetBudgetTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3extractedTb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3contextPartsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3extractedTb4b4b4)
Te6edf3totalChars Tff7b72+Tff7b72= Te6edf3extractedTb4b4b4.Te6edf3length
Te6edf3usedPageIdsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3pageTb4b4b4.Te6edf3idTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72return Te6edf3ContextResultTb4b4b4(Te6edf3parts Tff7b72= Te6edf3contextPartsTb4b4b4, Te6edf3usedPageIds Tff7b72= Te6edf3usedPageIdsTb4b4b4, Te6edf3totalChars Tff7b72= Te6edf3totalCharsTb4b4b4)
Tb4b4b4}

T8b949e/** Extracts query terms from a question, filtering short/stop words. */
Tff7b72private Tff7b72fun Td2a8ffextractQueryTermsTb4b4b4(Te6edf3questionTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72> Tff7b72= Te6edf3question
Tb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff[^Ta5d6ff\\Ta5d6ffp{L}Ta5d6ff\\Ta5d6ffp{N}Ta5d6ff\\Ta5d6ffs-]Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)
Tb4b4b4.Te6edf3splitTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff\\Ta5d6ffs+Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3length Tff7b72>Tff7b72= T79c0ff2 Tff7b72&Tff7b72& Tffa657it Tff7b72!in Te6edf3STOP_WORDS Tb4b4b4}
Tb4b4b4.Te6edf3distinctTb4b4b4(Tb4b4b4)

T8b949e/**
* Extracts the most relevant content from a page: the paragraphs that contain query terms, with markdown formatting
* stripped for maximum information density.
*/
Tff7b72private Tff7b72fun Td2a8ffextractRelevantContentTb4b4b4(
Te6edf3titleTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3markdownTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3queryTermsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4,
Te6edf3maxCharsTb4b4b4: Tffa657IntTb4b4b4,
Tb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3plainText Tff7b72= Te6edf3stripMarkdownTb4b4b4(Te6edf3markdownTb4b4b4)

T8b949e// Split into paragraphs (double newline or section breaks).
Tff7b72val Te6edf3paragraphs Tff7b72= Te6edf3plainTextTb4b4b4.Te6edf3splitTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff\Ta5d6ffn{2,}Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3length Tff7b72>Tff7b72= Te6edf3MIN_PARAGRAPH_LEN Tb4b4b4}

T8b949e// Score each paragraph by how many query terms it contains.
Tff7b72val Te6edf3scored Tff7b72=
Te6edf3paragraphsTb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3paragraph Tff7b72-Tff7b72>
Tff7b72val Te6edf3lower Tff7b72= Te6edf3paragraphTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3hits Tff7b72= Te6edf3queryTermsTb4b4b4.Te6edf3count Tb4b4b4{ Te6edf3term Tff7b72-Tff7b72> Te6edf3lowerTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4) Tb4b4b4}
Te6edf3paragraph Te6edf3to Te6edf3hits
Tb4b4b4}

T8b949e// Take paragraphs with hits first (sorted by hits desc), then fill with top paragraphs for context.
Tff7b72val Te6edf3withHits Tff7b72= Te6edf3scoredTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tff7b72> T79c0ff0 Tb4b4b4}Tb4b4b4.Te6edf3sortedByDescending Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tb4b4b4}
Tff7b72val Te6edf3withoutHits Tff7b72= Te6edf3scoredTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tff7b72=Tff7b72= T79c0ff0 Tb4b4b4}

Tff7b72val Te6edf3result Tff7b72= Te6edf3StringBuilderTb4b4b4(Ta5d6ff"Tffd700$Te6edf3titleTa5d6ff: Ta5d6ff"Tb4b4b4)
Tff7b72for Tb4b4b4(Tb4b4b4(Te6edf3paragraphTb4b4b4, Te6edf3_Tb4b4b4) Tff7b72in Te6edf3withHits Tff7b72+ Te6edf3withoutHitsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3resultTb4b4b4.Te6edf3length Tff7b72+ Te6edf3paragraphTb4b4b4.Te6edf3length Tff7b72+ T79c0ff1 Tff7b72> Te6edf3maxCharsTb4b4b4) Tb4b4b4{
T8b949e// Try to fit a truncated version if we have room.
Tff7b72val Te6edf3remaining Tff7b72= Te6edf3maxChars Tff7b72- Te6edf3resultTb4b4b4.Te6edf3length Tff7b72- T79c0ff1
Tff7b72if Tb4b4b4(Te6edf3remaining Tff7b72> Te6edf3MIN_USEFUL_SNIPPETTb4b4b4) Tb4b4b4{
Te6edf3resultTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3paragraphTb4b4b4.Te6edf3takeTb4b4b4(Te6edf3remainingTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tff7b72break
Tb4b4b4}
Te6edf3resultTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3paragraphTb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff'\n'Tb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3resultTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)
Tb4b4b4}

T8b949e/** Strips markdown formatting to produce dense plain text. */
Tff7b72private Tff7b72fun Td2a8ffstripMarkdownTb4b4b4(Te6edf3markdownTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Te6edf3markdown
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff^#{1,6}Ta5d6ff\\Ta5d6ffs+Ta5d6ff"Tb4b4b4, Te6edf3RegexOptionTb4b4b4.Te6edf3MULTILINETb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) T8b949e// headers
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff\\Ta5d6ff[([^]]+)]Ta5d6ff\\Ta5d6ff([^)]+Ta5d6ff\\Ta5d6ff)Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Tffd700$Te6edf31Ta5d6ff"Tb4b4b4) T8b949e// links → text
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff!Ta5d6ff\\Ta5d6ff[([^]]*)]Ta5d6ff\\Ta5d6ff([^)]+Ta5d6ff\\Ta5d6ff)Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Tffd700$Te6edf31Ta5d6ff"Tb4b4b4) T8b949e// images → alt
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff[*_]{1,3}([^*_]+)[*_]{1,3}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Tffd700$Te6edf31Ta5d6ff"Tb4b4b4) T8b949e// bold/italic
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff`{1,3}[^`]*`{1,3}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) T8b949e// inline code
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff^[>|Ta5d6ff\\Ta5d6ff-*+]Ta5d6ff\\Ta5d6ffs?Ta5d6ff"Tb4b4b4, Te6edf3RegexOptionTb4b4b4.Te6edf3MULTILINETb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) T8b949e// block quotes, lists
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff\\Ta5d6ff|Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4) T8b949e// table pipes
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff-{3,}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) T8b949e// horizontal rules
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff {2,}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4) T8b949e// collapse whitespace
Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)

T8b949e/**
* Ranks pages by relevance using full-text content search + keyword/title matching. Returns pages sorted by score
* descending, filtering out zero-score pages.
*/
Tff7b72private Tff7b72fun Td2a8ffrankPagesByRelevanceTb4b4b4(
Te6edf3queryTermsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4,
Te6edf3pagesTb4b4b4: Te6edf3ListTff7b72<Te6edf3DocPageTff7b72>Tb4b4b4,
Te6edf3allContentTb4b4b4: Te6edf3MapTff7b72<Te6edf3DocPageTb4b4b4, Tffa657StringTff7b72>Tb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Te6edf3PairTff7b72<Te6edf3DocPageTb4b4b4, Tffa657IntTff7b72>Tff7b72> Tff7b72= Te6edf3pages
Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3page Tff7b72-Tff7b72>
Tff7b72var Te6edf3score Tff7b72= T79c0ff0
Tff7b72val Te6edf3content Tff7b72= Te6edf3allContentTff7b72[Te6edf3pageTff7b72]Tff7b72?.Te6edf3lowercaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3orEmptyTb4b4b4(Tb4b4b4)

Tff7b72for Tb4b4b4(Te6edf3term Tff7b72in Te6edf3queryTermsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3contentTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4)Tb4b4b4) Te6edf3score Tff7b72+Tff7b72= Te6edf3CONTENT_MATCH_SCORE
Tff7b72if Tb4b4b4(Te6edf3pageTb4b4b4.Te6edf3titleTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4)Tb4b4b4) Te6edf3score Tff7b72+Tff7b72= Te6edf3TITLE_MATCH_SCORE
Tff7b72if Tb4b4b4(Te6edf3pageTb4b4b4.Te6edf3keywordsTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4) Tb4b4b4}Tb4b4b4) Te6edf3score Tff7b72+Tff7b72= Te6edf3KEYWORD_MATCH_SCORE
Tff7b72if Tb4b4b4(Te6edf3pageTb4b4b4.Te6edf3aliasesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4) Tb4b4b4}Tb4b4b4) Te6edf3score Tff7b72+Tff7b72= Te6edf3ALIAS_MATCH_SCORE
Tb4b4b4}

Te6edf3page Te6edf3to Te6edf3score
Tb4b4b4}
Tb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tff7b72> T79c0ff0 Tb4b4b4}
Tb4b4b4.Te6edf3sortedByDescending Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffbuildPromptTb4b4b4(Te6edf3questionTb4b4b4: Tffa657StringTb4b4b4, Te6edf3contextPartsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3context Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3contextPartsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3contextPartsTb4b4b4.Te6edf3joinToStringTb4b4b4(Ta5d6ff"Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3FALLBACK_CONTEXT
Tb4b4b4}
Tff7b72return Ta5d6ff"""
Ta5d6ff |Bundled app documentation:
|Tffd700$Te6edf3context
Ta5d6ff |
|User question: Tffd700$Te6edf3question
Ta5d6ff Ta5d6ff"""
Tb4b4b4.Te6edf3trimMarginTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72const Tff7b72val Te6edf3TAG Tff7b72= Ta5d6ff"Ta5d6ffChirpyAITa5d6ff"

T8b949e/** Gemini 3.1 Flash-Lite — latest stable model (2026-05-07), free tier, supports grounding. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MODEL_NAME Tff7b72= Ta5d6ff"Ta5d6ffgemini-3.1-flash-liteTa5d6ff"

Tff7b72private Tff7b72const Tff7b72val Te6edf3SYSTEM_INSTRUCTION Tff7b72=
Ta5d6ff"""Ta5d6ffYou are Chirpy, the friendly AI assistant built into the Meshtastic Android app. You help users understand mesh networking, configure their Meshtastic nodes, troubleshoot connectivity issues, and get the most out of the Meshtastic ecosystem.

Personality: Helpful, concise, enthusiastic about mesh networking. Use short paragraphs. Include relevant emoji sparingly (📡 🔋 📍).

Knowledge sources (in priority order):
1. Bundled app documentation provided as context below
2. Official Meshtastic documentation at meshtastic.org/docs
3. Official Meshtastic GitHub repositories (github.com/meshtastic)
4. General LoRa/mesh networking knowledge

Guidelines:
Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully
When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them
When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help When the bundled docs don't cover it, use your knowledge of official Meshtastic sources — don't refuse to help
Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) — never cite random forums, blogs, or third-party sites
For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs
Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail
If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f

T8b949e/** Total context char budget — sized for on-device Nano (~4K tokens ≈ 10K chars for context + prompt). */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_CONTEXT_CHARS Tff7b72= T79c0ff8Te6edf3_000

T8b949e/** Max chars for the current page (gets priority). */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_PAGE_CHARS Tff7b72= T79c0ff4Te6edf3_000

T8b949e/** Max chars per additional page snippet. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_SNIPPET_CHARS Tff7b72= T79c0ff2Te6edf3_000

T8b949e/** Minimum useful snippet size — don't bother with tiny fragments. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MIN_USEFUL_SNIPPET Tff7b72= T79c0ff1T79c0ff0T79c0ff0

T8b949e/** Minimum paragraph length to consider. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MIN_PARAGRAPH_LEN Tff7b72= T79c0ff2T79c0ff0

T8b949e// Scoring weights for page ranking
Tff7b72private Tff7b72const Tff7b72val Te6edf3CONTENT_MATCH_SCORE Tff7b72= T79c0ff3
Tff7b72private Tff7b72const Tff7b72val Te6edf3TITLE_MATCH_SCORE Tff7b72= T79c0ff1T79c0ff0
Tff7b72private Tff7b72const Tff7b72val Te6edf3KEYWORD_MATCH_SCORE Tff7b72= T79c0ff7
Tff7b72private Tff7b72const Tff7b72val Te6edf3ALIAS_MATCH_SCORE Tff7b72= T79c0ff5

Tff7b72private Tff7b72val Te6edf3STOP_WORDS Tff7b72=
Te6edf3setOfTb4b4b4(
Ta5d6ff"Ta5d6fftheTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffisTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffatTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffinTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffonTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffofTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffanTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffitTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffmeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffmyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fforTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffifTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffasTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffsoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffweTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffheTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffupTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffamTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffusTa5d6ff"Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72const Tff7b72val Te6edf3FALLBACK_CONTEXT Tff7b72=
Ta5d6ff"Ta5d6ffMeshtastic is an open-source mesh networking platform for LoRa radios. Ta5d6ff" Tff7b72+
Ta5d6ff"Ta5d6ffThe app connects to Meshtastic devices via Bluetooth or WiFi to send messages, Ta5d6ff" Tff7b72+
Ta5d6ff"Ta5d6ffshare location, and manage mesh network settings like channels, nodes, and modules.Ta5d6ff"

T8b949e/** URLs appended to prompts for the cloud model to leverage URL context tool. Only official sources. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MESHTASTIC_URL_HINT Tff7b72=
Ta5d6ff"Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnFor additional context, you may reference these official sources:Ta5d6ff" Tff7b72+
Ta5d6ff"Ta5d6ff\Ta5d6ffn- https://meshtastic.org/docs/Ta5d6ff" Tff7b72+
Ta5d6ff"Ta5d6ff\Ta5d6ffn- https://github.com/meshtastic/Meshtastic-AndroidTa5d6ff" Tff7b72+
Ta5d6ff"Ta5d6ff\Ta5d6ffn- https://github.com/meshtastic/firmwareTa5d6ff" Tff7b72+
Ta5d6ff"Ta5d6ff\Ta5d6ffn- https://github.com/meshtastic/protobufsTa5d6ff"
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.2 - Generated in 0.32s